﻿//单值二叉树的判断
//bool isUnivalTree(struct TreeNode* root) {
//    if (!root) {
//        return true;
//    }
//    if ((root->left && root->val != root->left->val) || (root->right && root->val != root->right->val)) {
//        return false;
//    }
// //当全部为1时，式子才为1
// //注意: 在使用二叉树的递归时，有些不可直接用isUnivalTree(root->left或root->right),因为没有返回类型
//    return isUnivalTree(root->left) && isUnivalTree(root->right); //可考虑用条件判断作为返回类型(数值为0或1)
//}

//int maxDepth(struct TreeNode* root) {
//    if (root == NULL)
//        return 0;
//    int leftdeep = maxDepth(root->left);
//    int rightdeep = maxDepth(root->right);
//    return (leftdeep > rightdeep) ? (leftdeep + 1) : (rightdeep + 1);
//}

//List MakeEmpty() {
//    List L = (List)malloc(sizeof(struct LNode));
//    L->Last = -1;
//    return L;
//}
//Position Find(List L, ElementType X) {
//    for (int i = 0; i <= L->Last; i++) {
//        if (L->Data[i] == X) {
//            return i;
//        }
//    }
//    return ERROR;
//}
//bool Insert(List L, ElementType X, Position P) {
//    if (L->Last == MAXSIZE - 1) {
//        printf("FULL");
//        return false;
//    }
//    if (P < 0 || P > L->Last + 1) {
//        printf("ILLEGAL POSITION");
//        return false;
//    }
//    if (L->Last == -1 || P == L->Last + 1) {
//        L->Data[++L->Last] = X;
//        return true;
//    }
//    int a = L->Last;
//    while (a >= P) {
//        L->Data[a + 1] = L->Data[a];
//        a--;
//    }
//    L->Data[P] = X;
//    L->Last++;
//    return true;
//}
//bool Delete(List L, Position P) {
//    if (P < 0 || P > L->Last) {
//        fprintf(stdout, "POSITION %d EMPTY", P);
//        return false;
//    }
//    while (P < L->Last) {
//        L->Data[P] = L->Data[P + 1];
//        P++;
//    }
//    L->Last--;
//    return true;
//}

//#include <stdio.h>
//#include <stdlib.h>
//#define ERROR NULL
//typedef int ElementType;
//typedef struct LNode* PtrToLNode;
//struct LNode {
//    ElementType Data;
//    PtrToLNode Next;
//};
//typedef PtrToLNode Position;
//typedef PtrToLNode List;
//Position Find(List L, ElementType X);
//List Insert(List L, ElementType X, Position P);
//List Delete(List L, Position P);
//int main()
//{
//    List L;
//    ElementType X;
//    Position P, tmp;
//    int N;
//    L = NULL;
//    scanf("%d", &N);
//    while (N--) {
//        scanf("%d", &X);
//        L = Insert(L, X, L);
//        if (L == ERROR) printf("Wrong Answer\n");
//    }
//    scanf("%d", &N);
//    while (N--) {
//        scanf("%d", &X);
//        P = Find(L, X);
//        if (P == ERROR)
//            printf("Finding Error: %d is not in.\n", X);
//        else {
//            L = Delete(L, P);
//            printf("%d is found and deleted.\n", X);
//            if (L == ERROR)
//                printf("Wrong Answer or Empty List.\n");
//        }
//    }
//    L = Insert(L, X, NULL);
//    if (L == ERROR) printf("Wrong Answer\n");
//    else
//        printf("%d is inserted as the last element.\n", X);
//    P = (Position)malloc(sizeof(struct LNode));
//    tmp = Insert(L, X, P);
//    if (tmp != ERROR) printf("Wrong Answer\n");
//    tmp = Delete(L, P);
//    if (tmp != ERROR) printf("Wrong Answer\n");
//    for (P = L; P; P = P->Next) printf("%d ", P->Data);
//    return 0;
//}
//Position Find(List L, ElementType X) {
//    for (List p = L; p != ERROR; p = p->Next) {
//        if (p->Data == X) {
//            return p;
//        }
//    }
//    return ERROR;
//}
//List Insert(List L, ElementType X, Position P) {
//    List head = L;
//    List last = ERROR;
//    List node = (List)malloc(sizeof(struct LNode));
//    if (P == head) {
//        node->Data = X;
//        node->Next = head;
//        return node;
//    }
//    L = L->Next;
//    do {
//        if (P == L) {
//            node->Data = X;
//            node->Next = P;
//            last->Next = node;
//            return head;
//        }
//        last = L;
//        L = L->Next;
//    } while (L != ERROR);
//    if (P == L) {
//        node->Data = X;
//        node->Next = P;
//        last->Next = node;
//        return head;
//    }
//    fprintf(stdout, "Wrong Position for Insertion\n");
//    return ERROR;
//}
//List Delete(List L, Position P) {
//    if (L == ERROR) {
//        fprintf(stdout, "Wrong Position for Deletion\n");
//        return ERROR;
//    }
//    List head = L;
//    List last = 0;
//    if (P == head) {
//        if ()
//            head = head->Next;
//        free(P);
//        return head;
//    }
//    for (; L != ERROR; L = L->Next) {
//        if (L == P) {
//            last->Next = P->Next;
//            free(P);
//            return head;
//        }
//        last = L;
//    }
//    fprintf(stdout, "Wrong Position for Deletion\n");
//    return ERROR;
//}